package com.pai4j.aigc.context;

import com.pai4j.aigc.context.model.ChatMessageContext;
import com.pai4j.aigc.context.service.ChatContextService;
import com.pai4j.common.util.SpringContextUtil;

import java.util.List;

/**
 * 简洁上下文门面工具：一行代码调用
 */
public class ContextKit {
    /**
     * 获取ChatContextService服务实例
     * 通过Spring上下文工具类获取ChatContextService的bean实例
     * @return ChatContextService服务实例
     */
    private static ChatContextService svc() {
        return SpringContextUtil.getBean(ChatContextService.class);
    }

    /**
     * 确保会话存在，如果不存在则创建新的会话
     * @param userId 用户ID
     * @param botId 机器人ID
     * @param preferSessionId 偏好的会话ID，如果为null或空则自动生成
     * @return 会话ID
     */
    public static String ensureSession(String userId, String botId, String preferSessionId) {
        return svc().ensureSession(userId, botId, preferSessionId);
    }

    /**
     * 显式创建一个新的会话（不复用历史会话）。
     * @param userId 用户ID
     * @param botId 机器人ID
     * @return 新的会话ID
     */
    public static String createNewSession(String userId, String botId) {
        return svc().createNewSession(userId, botId);
    }

    /**
     * 加载指定会话的最近消息记录
     * @param sessionId 会话ID
     * @param limit 限制返回的消息数量
     * @return 最近的消息上下文列表
     */
    public static List<ChatMessageContext> loadRecent(String sessionId, int limit) {
        return svc().loadRecent(sessionId, limit);
    }

    /**
     * 向指定会话中添加用户消息
     * @param sessionId 会话ID
     * @param content 消息内容
     */
    public static void appendUser(String sessionId, String content) {
        svc().append(sessionId, "user", content);
    }

    /**
     * 追加用户消息（带名称和partial）
     */
    public static void appendUser(String sessionId, String content, String name, Boolean partial) {
        svc().append(sessionId, "user", content, name, partial);
    }

    /**
     * 向指定会话中添加助手消息
     * @param sessionId 会话ID
     * @param content 消息内容
     */
    public static void appendAssistant(String sessionId, String content) {
        svc().append(sessionId, "assistant", content);
    }

    /**
     * 追加助手消息（带名称和partial）
     */
    public static void appendAssistant(String sessionId, String content, String name, Boolean partial) {
        svc().append(sessionId, "assistant", content, name, partial);
    }

    /**
     * 根据需要对会话进行摘要处理
     * 当会话消息过多时，自动进行摘要以节省存储空间
     * @param sessionId 会话ID
     */
    public static void summarizeIfNeeded(String sessionId) {
        svc().summarizeIfNeeded(sessionId);
    }

    /**
     * 以JSON数组字符串形式返回最近的上下文
     */
    public static String loadRecentJson(String sessionId, int limit) {
        return svc().loadRecentJson(sessionId, limit);
    }
}
